package utiles.zip;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class ExtraerZip {
	private ZipInputStream zis;
	private File archivoZip;
	
	public ExtraerZip(String nombreZip, String ubicacionSalida) throws IOException {
		archivoZip= new File(nombreZip);
		zis = new ZipInputStream(new FileInputStream(archivoZip));
		
		descomprimir(ubicacionSalida);
		
		zis.close();
	}

	private void descomprimir(String ubicacionSalida) throws FileNotFoundException, IOException {
		File archivo;
		ZipEntry entrada;
		while (null != (entrada=zis.getNextEntry()) ){
		   System.out.println("Entrada Zip: "+entrada.getName());
		   archivo= new File(ubicacionSalida+"/"+entrada.getName());
		   
		   if(!archivo.getParentFile().exists()){
			   archivo.getParentFile().mkdirs();
		   }		   
			   
		   FileOutputStream fos = new FileOutputStream(archivo);
		   int leido;
		   byte [] buffer = new byte[1024];
		   while (0<(leido=zis.read(buffer))){
		      fos.write(buffer,0,leido);
		   }
		   fos.close();
		   zis.closeEntry();
		}
	}

	@Override
	public String toString() {
		return archivoZip.getAbsolutePath();
	}
	
	public static void main(String[] args) {
		String nombreZip= "D:/testZip/pepito.zip", ubicacionSalida= "D:/testZip/temp";
		try {
			ExtraerZip ez= new ExtraerZip(nombreZip, ubicacionSalida);
			System.out.println(ez);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
